void LutOp (ImSize, Lut, Image)
int  ImSize;
BYTE *Lut;
BYTE **Image;
{
   int r,c;
   for (r=0; r<ImSize; r++)
      for (c=0; c<ImSize; c++)  Image[r][c] = Lut [Image[r][c]];
}


void Invert (MaxGV, Lut)
int  MaxGV;
BYTE *Lut;
{
   int  r,c, gv;
   for (gv=0; gv<MaxGV; gv++)  Lut [gv] = (BYTE) (MaxGV-gv-1);
}


void Stretch (LoGV, HiGV, MaxGV, Lut)
int  LoGV, HiGV, MaxGV;
BYTE *Lut;
{
   int  r,c, gv;
   long gvn;

   for (gv=0; gv<MaxGV; gv++) {
      if (LoGV<=gv && gv<HiGV) {
         gvn = gv - LoGV;
         gvn = (gvn * (MaxGV-1)) / (HiGV-LoGV);
         Lut [gv] = (BYTE) gvn;
      }else
         Lut [gv] = (BYTE) ((gv<LoGV) ? 0 : (MaxGV-1));
}  }


void Mark (LoGV, HiGV, MaxGV, Color, Lut)
int  LoGV, HiGV, MaxGV, Color;
BYTE *Lut;
{
   int  r,c, gv;
   for (gv=0; gv<MaxGV; gv++)
      if (LoGV<=gv && gv<HiGV)  Lut [gv] = (BYTE) Color;
                          else  Lut [gv] = (BYTE) gv;
}
